
// 泛型：把类型作为变量。把类型泛化。

// 一、函数里使用泛型

// 1、T就是声明了一个变量（类型的变量）；
function fn03<T>(a:T,b:T):T{
    return a;
}

// 2、在调用函数时，给T赋值为number；
fn03<number>(12,23);

// 在调用函数时，给T赋值string。
fn03<string>("hello","hi");

function fn04<T,S>(a:T,b:S):T{
    return a;
}

fn04<number,string>(12,"");



// 二、类里面使用泛型
// 1、定义一个类型，使用泛型
//   定义类时，声明了两个类型变量，分别是T和P
class Person<T,P>{
    public a:T;
    public b:P;

    constructor(aaaa:T,b:P){
        this.a = aaaa;
        this.b = b;
    }
}

// 2、使用类（实例化对象）时，传入类型变量。
let p1 =new Person<number,string>(12,"");

let p2 = new Person<boolean,number>(true,15);


interface IBook{
    name:string,
    author:string,
    price:number
}

let b1:IBook ={
    name:"西游记",
    author:"张杰",
    price:12
}

let p3 = new Person<IBook,number>(b1,12);


export default{

}